/*
 * Copyright (c)  2020,  DataPipeline
 * All rights reserved.
 *
 * Id:NameConversion.java   2020-07-18 15:20 wanglijun
 */
package cn.datacare.orm.conversion;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * Title:
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: Copyright (c) 2020
 * </p>
 * <p>
 * Company/Department: DataPipeline
 * </p>
 *
 * @author wanglijun
 * @version 1.0
 * @since 2020-07-18 15:20
 */
public abstract class NameConversion {

    /**
     * ID
     */
    public static final String ID="id";

    /****
     * 根据实体class获取表名
     * @param c
     * @returnNameConversion
     */
    public abstract String getTableName(Class<?> c);


    /**
     * 不一定要实现，主要用于根据表生成java代码
     *
     * @param tableName
     * @return String ClassName
     */
    public String getClassName(String tableName) {
        return tableName;
    }

    /***
     * 获取ColName
     * @param attrName
     * @return String ColName
     */
    public String getColName(String attrName) {
        return getColName(null, attrName);
    }

    /****
     * 根据class和属性名，获取字段名，此字段必须存在表中，否则返回空
     * @param c
     * @param attrName
     * @return
     */
    public abstract String getColName(Class<?> c, String attrName);

    /****
     * 根据class和colName获取属性名
     * @param c
     * @param colName
     * @return
     */
    public abstract String getPropertyName(Class<?> c, String colName);

    /***
     * 获取属性名称
     * @param colName
     * @return String
     */
    public String getPropertyName(String colName) {
        return getPropertyName(null, colName);
    }

    /***
     *  根据class获取表中所有的id
     * @return
     */
    public List<String> getId() {
        List<String> list = new ArrayList<>(1);
        list.add(ID);
        return list;
    }
}
